package com.teacher.game.model;

import android.graphics.Rect;
import com.teacher.ellio.Assets;
import com.teacher.game.framework.util.Painter;
import com.teacher.game.framework.util.RandomNumberGenerator;

/**
 * 静态障碍物 - 传统的固定位置障碍物
 * 继承自AbstractObstacle，保持向后兼容性
 */
public class StaticBlock extends AbstractObstacle {
    
    private Rect collisionRect = new Rect(); // 复用碰撞检测矩形
    
    /**
     * 构造函数
     */
    public StaticBlock(float x, float y, int width, int height) {
        super(x, y, width, height, ObstacleType.STATIC);
    }
    
    @Override
    public void update(float delta, int baseSpeed) {
        // 水平移动
        x += baseSpeed * delta;
        
        // 当障碍物移出屏幕左侧时，重置到右侧
        if (x <= -width) {
            resetToRightSide();
        }
    }
    
    @Override
    public void render(Painter g) {
        if (isOnScreen(800)) { // 只渲染屏幕内的障碍物
            g.drawImage(Assets.block, (int)x, (int)y);
        }
    }
    
    @Override
    public void reset(float newX, float newY) {
        setPosition(newX, newY);
        isPassed = false;
        isActive = true;
    }
    
    @Override
    public Rect getCollisionRect() {
        collisionRect.set(
            (int)x, (int)y, 
            (int)x + width, (int)y + height
        );
        return collisionRect;
    }
    
    @Override
    public boolean requiresJump() {
        return y <= 360; // 高位置障碍物需要跳跃
    }
    
    @Override
    public boolean requiresDuck() {
        return y > 360; // 低位置障碍物需要下蹲
    }
    
    @Override
    public int getDifficultyScore() {
        return 1; // 静态障碍物基础难度
    }
    
    @Override
    public int getRewardScore() {
        return 10; // 基础奖励分数
    }
    
    /**
     * 重置障碍物位置和状态
     */
    private void resetToRightSide() {
        x += 1000; // 重置到屏幕右侧
        
        // 随机设置高度
        if (RandomNumberGenerator.getRandInt(3) == 0) {
            y = 330; // 高位置（需要跳跃）
        } else {
            y = 390; // 低位置（需要下蹲）
        }
        
        // 重置状态
        isPassed = false;
        isActive = true;
    }
    
    /**
     * 重置到对象池可用状态
     */
    public void resetToPool() {
        isPassed = false;
        isActive = true;
    }
}